package br.com.pucrs.tcc.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.pucrs.tcc.ed.GrupoTrabalho;
import br.com.pucrs.tcc.ed.Nota;
import br.com.pucrs.tcc.ed.Professor;
import br.com.pucrs.tcc.enumerator.TipoNotaEnum;
import br.com.pucrs.tcc.exception.NotaException;
import br.com.pucrs.tcc.rn.GrupoTrabalhoRN;
import br.com.pucrs.tcc.rn.NotaRN;
import br.com.pucrs.tcc.rn.ProfessorRN;
import br.com.pucrs.tcc.util.jsf.MensagemUtil;
import br.com.pucrs.tcc.util.jsf.PaginaUtil;
import br.com.pucrs.tcc.util.jsf.ParametroPagina;

//import javax.enterprise.context.SessionScoped;

@ManagedBean(name = "NotaBean")
@ViewScoped
public class NotaBean implements Serializable {

	private String id;

	@EJB
	private GrupoTrabalhoRN mGrupoTrabalhoRN;

	@EJB
	private NotaRN mNotaRN;

	@EJB
	private ProfessorRN mProfessorRN;

	private GrupoTrabalho grupo;

	private ArrayList<Nota> notasTC1;

	private ArrayList<Nota> notasTC2;

	private List<Nota> notas;

	private List<Professor> avaliadores;

	public NotaBean() {
	}

	public void init() {
		if (!FacesContext.getCurrentInstance().isPostback()) {
			if (id != null) {
				grupo = mGrupoTrabalhoRN.obter(Integer.parseInt(id));

				if (grupo != null) {
					avaliadores = mProfessorRN.listaAvaliadores(grupo);
				} else {

				}
			}

			if (notasTC1 == null) {
				notasTC1 = new ArrayList<Nota>();
			}

			notasTC1.add(new Nota(grupo, TipoNotaEnum.PROPOSTA_ORIENTADOR.getCodigo(), grupo.getProfessor()));
			if (avaliadores.size() > 0) {
				notasTC1.add(new Nota(grupo, TipoNotaEnum.PROPOSTA_AVALIADOR.getCodigo(), avaliadores.get(0)));
			} else {
				notasTC1.add(new Nota(grupo, TipoNotaEnum.PROPOSTA_AVALIADOR.getCodigo(), new Professor()));
			}

			notasTC1.add(new Nota(grupo, TipoNotaEnum.TCC1_ORIENTADOR.getCodigo(), grupo.getProfessor()));
			if (avaliadores.size() > 0) {
				notasTC1.add(new Nota(grupo, TipoNotaEnum.TCC1_AVALIADOR.getCodigo(), avaliadores.get(0)));
			} else {
				notasTC1.add(new Nota(grupo, TipoNotaEnum.TCC1_AVALIADOR.getCodigo(), new Professor()));
			}

			if (notasTC2 == null) {
				notasTC2 = new ArrayList<Nota>();
			}

			notasTC2.add(new Nota(grupo, TipoNotaEnum.TCC2_ORIENTADOR.getCodigo(), grupo.getProfessor()));
			if (avaliadores.size() > 0) {
				notasTC2.add(new Nota(grupo, TipoNotaEnum.TCC2_AVALIADOR_1.getCodigo(), avaliadores.get(0)));
				if (avaliadores.size() > 1) {
					notasTC2.add(new Nota(grupo, TipoNotaEnum.TCC2_AVALIADOR_2.getCodigo(), avaliadores.get(1)));
				} else {
					notasTC2.add(new Nota(grupo, TipoNotaEnum.TCC2_AVALIADOR_2.getCodigo(), new Professor()));
				}
			} else {
				notasTC2.add(new Nota(grupo, TipoNotaEnum.TCC2_AVALIADOR_1.getCodigo(), new Professor()));
				notasTC2.add(new Nota(grupo, TipoNotaEnum.TCC2_AVALIADOR_2.getCodigo(), new Professor()));
			}

			for (Nota nota : notasTC1) {
				Nota notaRetorno = mNotaRN.obter(nota);
				if (notaRetorno != null) {
					System.out.println(">>>> >>" + notaRetorno.getId());
					nota.setId(notaRetorno.getId());
					nota.setDthNota(notaRetorno.getDthNota());
					nota.setObservacao(notaRetorno.getObservacao());
					nota.setValor(notaRetorno.getValor());
				}
			}

			for (Nota nota : notasTC2) {
				Nota notaRetorno = mNotaRN.obter(nota);
				
				if (notaRetorno != null) {
					nota.setId(notaRetorno.getId());
					nota.setDthNota(notaRetorno.getDthNota());
					nota.setObservacao(notaRetorno.getObservacao());
					nota.setValor(notaRetorno.getValor());
				}
			}
		}

	}

	public void doListar() {
		try {

			ArrayList<ParametroPagina> parametros = new ArrayList<ParametroPagina>();

			PaginaUtil.redirecionar("/pages/notas_grupo_lista.xhtml", parametros);
		} catch (Exception e) {
			MensagemUtil.mostraMensagemFatal("Problema ao salvar notas do grupo. Por favor tente mais tarde.");
			e.printStackTrace();
		}
	}

	public void doSalvar() {
		try {
			mNotaRN.salvar(notasTC1, notasTC2);
			MensagemUtil.mostraMensagemSucesso("Notas salvas com sucesso.");
		} catch (NotaException e) {
			MensagemUtil.mostraMensagemErro(e.getMessage());
		} catch (Exception e) {
			MensagemUtil.mostraMensagemFatal("Problema ao salvar notas do grupo. Por favor tente mais tarde.");
			e.printStackTrace();
		}
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public GrupoTrabalho getGrupo() {
		return grupo;
	}

	public void setGrupo(GrupoTrabalho grupo) {
		this.grupo = grupo;
	}

	public ArrayList<Nota> getNotasTC1() {
		return notasTC1;
	}

	public void setNotasTC1(ArrayList<Nota> notasTC1) {
		this.notasTC1 = notasTC1;
	}

	public ArrayList<Nota> getNotasTC2() {
		return notasTC2;
	}

	public void setNotasTC2(ArrayList<Nota> notasTC2) {
		this.notasTC2 = notasTC2;
	}

}
